package com.zh.blog.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zh.blog.dto.*;
import com.zh.blog.model.Comment;
import com.zh.blog.vo.CommentVO;
import com.zh.blog.vo.ConditionVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Collection;
import java.util.List;

/**
 * 评论
 * @author ZhengHao
 * Created At 2022/8/12.
 **/
@Repository
public interface CommentDao extends BaseMapper<Comment> {
    /**
     * 统计后台评论数量
     * @param condition 条件
     * @return 评论数量
     */
    Long countCommentDto(@Param("condition") ConditionVO condition);

    /**
     * 查询后台评论
     * @param current 页码
     * @param size 大小
     * @param condition 条件
     * @return 评论集合
     */
    List<CommentBackDto> listCommentBackDto(@Param("current") Long current,
                                            @Param("size") Long size,
                                            @Param("condition") ConditionVO condition);

    /**
     * 根据评论主题ID获取评论量
     * @param topicIdList 说说ID列表
     * @return 说说评论量
     */
    List<CommentCountDto> listCommentCountByTopicIds(List<Integer> topicIdList);

    /**
     * 查看评论
     * @param current 当前页码
     * @param size 大小
     * @param commentVO 评论信息
     * @return 评论集合
     */
    List<CommentDto> listComments(@Param("current") Long current,
                                  @Param("size") Long size,
                                  @Param("commentVO") CommentVO commentVO);

    /**
     * 查看评论ID集合下的回复
     * @param commentIdList 评论ID集合
     * @return 回复集合
     */
    List<ReplyDto> listReplies(@Param("commentIdList") List<Integer> commentIdList);

    /**
     * 根据评论ID查询回复总量
     * @param commentIdList 评论ID集合
     * @return 回复数量
     */
    List<ReplyCountDto> listReplyCountByCommentId(@Param("commentIdList") List<Integer> commentIdList);

    /**
     * 查看当条评论下的回复
     * @param current 当前页码
     * @param size 大小
     * @param commentId 评论ID
     * @return
     */
    List<ReplyDto> listRepliesByCommentId(@Param("current")Long current,
                                          @Param("size") Long size,
                                          @Param("commentId") Integer commentId);
}